/**
 * Created by Administrator on 2017/9/22 0022.
 */
var express=require('express');
var router=express.Router();
var User=require('../models/User');
var Category=require('../models/Category');
var Content=require('../models/Content');

router.use(function(req,res,next){
        if(!req.userInfo.isAdmin){
            //如果当前用户不是管理员
            res.send('对不起，只有管理员才能进入管理页面');
            return;
        }
    next()
});

/*
* 首页
* */
router.get('/',function(req,res,next){
          res.render('admin/index',{
              userInfo:req.userInfo
          });
});
/*
* 用户管理
* */
router.get('/user',function(req,res){
    /*
    * 数据库中获取数据
    * limit(number):限制获取的条数
    *
    * skip()：忽略的条数
    * 每页显示两条数据：
    * 1；1-2 skip:0->(当前页-1)*limit
    * 2: 3-4 skip:2
    * */
    var page=Number(req.query.page||1);
    var limit=3;
    var pages=0;

    User.count().then(function(count){
        //计算总页数
       pages=Math.ceil(count/limit);
        //取值不能超过pages
        page=Math.min(page,pages);
        //取值不能超过1
        page=Math.max(page,1);
        var skip=(page-1)*limit;
        User.find().limit(limit).skip(skip).then(function(users){
            res.render('admin/user_index',{
                userInfo:req.userInfo,
                users:users,

                pages:pages,
                limit:limit,
                count:count,
                page:page
            });
        });
    });
});
/*
 * 分类首页
 * */
router.get('/category',function(req,res){
    var page=Number(req.query.page||1);
    var limit=3;
    var pages=0;

    Category.count().then(function(count){
        //计算总页数
        pages=Math.ceil(count/limit);
        //取值不能超过pages
        page=Math.min(page,pages);
        //取值不能超过1
        page=Math.max(page,1);
        var skip=(page-1)*limit;
        /*
         * 排序方法sort（{id：}）id后面两个值1和-1
         * 1：升序
         * -1：降序
         * */
        Category.find().sort({_id:-1}).limit(limit).skip(skip).then(function(categories){
            res.render('admin/category_index',{
                userInfo:req.userInfo,
                categories:categories,

                pages:pages,
                limit:limit,
                count:count,
                page:page
            });
        });
    });
});
/*
* 添加分类
* */
router.get('/category/add',function(req,res){
    res.render('admin/category_add',{
        userInfo:req.userInfo
    })
});
/*
* 分类的保存
* */
router.post('/category/add',function(req,res){
     var name=req.body.name||'';
    if(name==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'名称不能为空'
        });
        return;
    }
    //验证数据库中是否存在相同分类
    Category.findOne({
        name:name
    }).then(function(rs){
        if(rs){
            //数据库中已经存在该分类
            res.render('admin/error',{
            userInfo:req.userInfo,
            message:'该分类已存在'
            });
            return Promise.reject();
        }else {
            //数据库中不存在该分类，可以保存
            return new Category({
                name:name
            }).save();
        }
    }).then(function(newCategory){
            res.render('admin/success',{
                userInfo:req.userInfo,
                message:'该分类添加成功',
                url:'/admin/category'
            });
    });

});
/*
* 分类的编辑
* */
router.get('/category/edit',function(req,res){
    //获取要修改的分类的信息，并且用表单的形式展现出来
    var id=req.query.id||'';

    //获取要修改的分类信息
    Category.findOne({
        _id:id
    }).then(function(category){
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
        }else {
            res.render('admin/category_edit',{
                userInfo:req.userInfo,
                category:category
            })
        }
    });
});

/*
* 分类的修改保存
* */
router.post('/category/edit',function(req,res){
    //获取要修改的分类的信息，并且用表单的形式展现出来
    var id=req.query.id||'';
    //获取post提交过来的名称
    var name=req.body.name||'';

    //获取要修改的分类信息
    Category.findOne({
        _id:id
    }).then(function(category){
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
            return Promise.reject();
        }else {
            //当用户没有做任何修改提交的时候
            if(name==category.name){
                res.render('admin/success',{
                    userInfo:req.userInfo,
                    message:'分类信息保存成功'
                });
                return Promise.reject();
            }else {
                return Category.findOne({
                    _id:{$ne:id},//$ne意思是：数据库中不存在的id
                    name:name
                });
            }
        }
    }).then(function(sameCategory){
        if(sameCategory){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'该分类已存在'
            });
            return Promise.reject();
        }else {
         return Category.update({
             _id:id
         },{
             name:name
         });
        }
    }).then(function(){
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'分类信息修改成功'
        });
    });
});
/*
* 分类删除
* */
router.get('/category/delete',function(req,res){
    //获取要删除的分类id
    var id=req.query.id||'';

    Category.remove({
        _id:id
    }).then(function(){
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'该分类删除成功',
            url:'/admin/category'
        });
    });
});
/*
* 博客内容首页
* */
router.get('/content',function(req,res){
    var page=Number(req.query.page||1);
    var limit=3;
    var pages=0;

    Content.count().then(function(count){
        //计算总页数
        pages=Math.ceil(count/limit);
        //取值不能超过pages
        page=Math.min(page,pages);
        //取值不能超过1
        page=Math.max(page,1);
        var skip=(page-1)*limit;
        Content.find().limit(limit).skip(skip).populate(['category','user']).sort({
            addTime:-1
        }).then(function(contents){
            res.render('admin/content_index',{
                userInfo:req.userInfo,
                contents:contents,

                pages:pages,
                limit:limit,
                count:count,
                page:page
            });
        });
    });
});
/*
 * 博客内容添加
 * */
router.get('/content/add',function(req,res){
    //获取数据库中的所有分类信息
    Category.find().sort({_id:-1}).then(function(categories){
        res.render('admin/content_add',{
            userInfo:req.userInfo,
            categories:categories
        });
    });
});

/*
* 内容保存
* */
router.post('/content/add',function(req,res){
    if(req.body.title==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'内容标题不能为空'
        });
        return;
    }
    if(req.body.description==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'内容简介不能为空'
        });
        return;
    }
    //保存数据到数据库
    new Content({
        category:req.body.category,
        title:req.body.title,
        user:req.userInfo._id.toString(),
        content:req.body.content,
        description:req.body.description
    }).save().then(function(rs){
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'内容保存成功',
            url:'/admin/content'
        });
    });
});
/*
* 内容修改
* */
router.get('/content/edit',function(req,res){
     var id=req.query.id||'';

    var categories=[];
    Category.find().sort({_id:1}).then(function(rs){
        categories=rs;
       return Content.findOne({
            _id:id
        }).populate('category');
    }).then(function(content){
        if(!content){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'指定内容不存在'
            });
            return Promise.reject();
        }else {
            res.render('admin/content_edit',{
                userInfo:req.userInfo,
                content:content,
                categories:categories
            });
        }
    });

});
/*
* 修改内容保存
* */
router.post('/content/edit',function(req,res){
    var id=req.query.id||'';
    if(req.body.title==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'内容标题不能为空'
        });
        return;
    }
    if(req.body.description==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'内容简介不能为空'
        });
        return;
    }
    Content.update({
        _id:id
    },{
        category:req.body.categories,
        description:req.body.description,
        title:req.body.title,
        content:req.body.content
    }).then(function(){
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'内容保存成功',
            url:'/admin/content'
        });
    });
});
/*
* 内容删除
* */
router.get('/content/delete',function(req,res){
    var id=req.query.id||'';

    Content.remove({
        _id:id
    },function(){
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'删除成功',
            url:'/admin/content'
        });
    });
});
module.exports=router;//返回app中的后台模块